package com.petdog.module.pet.service;

import com.petdog.infrastructure.entity.Pet;
import com.petdog.module.pet.dto.PetCreateRequest;
import com.petdog.module.pet.dto.PetUpdateRequest;
import com.petdog.module.pet.dto.PetDetailResponse;
import com.petdog.module.pet.dto.PetListResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 宠物服务接口
 */
public interface PetService {
    
    /**
     * 创建宠物档案
     * @param request 创建请求
     * @param userId 用户ID
     * @return 创建的宠物
     */
    Pet createPet(PetCreateRequest request, Long userId);
    
    /**
     * 获取用户的宠物列表
     * @param userId 用户ID
     * @return 宠物列表
     */
    List<PetListResponse> getUserPets(Long userId);
    
    /**
     * 分页获取用户的宠物列表
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页宠物列表
     */
    com.petdog.common.dto.PageResult<Pet> getUserPets(Long userId, int pageNum, int pageSize);
    
    /**
     * 获取宠物详情
     * @param petId 宠物ID
     * @param userId 用户ID
     * @return 宠物详情
     */
    PetDetailResponse getPetDetail(Long petId, Long userId);
    
    /**
     * 更新宠物信息
     * @param petId 宠物ID
     * @param request 更新请求
     * @param userId 用户ID
     * @return 更新后的宠物
     */
    Pet updatePet(Long petId, PetUpdateRequest request, Long userId);
    
    /**
     * 删除宠物档案
     * @param petId 宠物ID
     * @param userId 用户ID
     */
    void deletePet(Long petId, Long userId);
    
    /**
     * 上传宠物照片
     * @param petId 宠物ID
     * @param photo 照片文件
     * @param userId 用户ID
     * @return 更新后的宠物
     */
    Pet updatePetPhoto(Long petId, MultipartFile photo, Long userId) throws IOException;
    
    /**
     * 分页查询宠物列表
     * @param params 查询参数
     * @return 宠物列表
     */
    List<PetListResponse> getPetList(Map<String, Object> params);
}
